home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / faq / vol15n14.zip / DDGAME.ZIP / GAMEFRAM.CPP < prev    next >
C/C++ Source or Header  |  1996-04-17  |  7KB  |  244 lines

  1. #include "stdafx.h"
  2. #include "GameFrame.h"
  3.  
  4. #include "Game.h"
  5. #include "Error.h"
  6.  
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12.  
  13. BEGIN_MESSAGE_MAP(CGameFrame, CFrameWnd)
  14.     //{{AFX_MSG_MAP(CGameFrame)
  15.     ON_WM_SYSCOMMAND()
  16.     ON_WM_ACTIVATEAPP()
  17.     //}}AFX_MSG_MAP
  18. END_MESSAGE_MAP()
  19.  
  20. //-----------------------------------------------------------------------------
  21. // default constructor
  22. //-----------------------------------------------------------------------------
  23. CGameFrame::CGameFrame()
  24. {
  25.   // Initialize variables
  26.   m_bUseEmulation = FALSE;
  27.  
  28.   m_pDD = NULL;
  29.   m_pFrontBuffer = NULL;
  30.   m_pBackBuffer = NULL;
  31.   m_pGamePalette = NULL;
  32.  
  33.   CString className = AfxRegisterWndClass(
  34.                         CS_NOCLOSE, // Windows class styles
  35.                         NULL,       // No cursor
  36.                         HBRUSH(::GetStockObject(BLACK_BRUSH)),  // Black background
  37.                         AfxGetApp()->LoadIcon(IDR_MAINFRAME));  
  38.  
  39.   // create actual window
  40.   #ifdef _DEBUG
  41.     // create actual window
  42.     CreateEx( 
  43.       0,
  44.       className, 
  45.       GetWindowTitle(), 
  46.       WS_OVERLAPPEDWINDOW,
  47.       0,0, 
  48.       100,100,
  49.       NULL,
  50.       NULL );
  51.   #else
  52.     // create actual window
  53.     CreateEx( 
  54.       WS_EX_TOPMOST,
  55.       className, 
  56.       GetWindowTitle(), 
  57.       WS_POPUP | WS_SYSMENU,
  58.       0,0, 
  59.       GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
  60.       NULL,
  61.       NULL );
  62.   #endif
  63. }
  64.  
  65. //-----------------------------------------------------------------------------
  66. // destructor
  67. //-----------------------------------------------------------------------------
  68. CGameFrame::~CGameFrame()
  69. {
  70. }
  71.  
  72. //-----------------------------------------------------------------------------
  73. // GetWindowTitle
  74. //-----------------------------------------------------------------------------
  75. CString CGameFrame::GetWindowTitle()
  76. {
  77.   return "Game";
  78. }
  79.  
  80. //-----------------------------------------------------------------------------
  81. // InitGraphics
  82. //-----------------------------------------------------------------------------
  83. BOOL CGameFrame::InitGraphics()
  84. {
  85.   HRESULT ddrval;
  86.  
  87.   if( m_bUseEmulation )
  88.     ddrval = DirectDrawCreate((GUID*)DDCREATE_EMULATIONONLY, &m_pDD, NULL);
  89.   else
  90.     ddrval = DirectDrawCreate(NULL, &m_pDD, NULL);
  91.   if (ddrval != DD_OK)
  92.   {
  93.     DDrawError("DirectDrawCreate failed:", ddrval);
  94.     return FALSE;
  95.   }
  96.  
  97.   ddrval = m_pDD->SetCooperativeLevel(m_hWnd, DDSCL_ALLOWREBOOT |
  98.                                               DDSCL_EXCLUSIVE | 
  99.                                               DDSCL_FULLSCREEN );
  100.   if (ddrval != DD_OK)
  101.   {
  102.     DDrawError("SetCooperativeLevel failed:", ddrval);
  103.     return FALSE;
  104.   }
  105.  
  106.   ddrval = m_pDD->SetDisplayMode(((CGameApp*)AfxGetApp())->m_displayWidth, 
  107.                                  ((CGameApp*)AfxGetApp())->m_displayHeight, 
  108.                                  8);
  109.   if (ddrval != DD_OK)
  110.   {
  111.     DDrawError("SetDisplayMode failed:", ddrval);
  112.     return FALSE;
  113.   }
  114.  
  115.   // Create flipping surface
  116.   DDSURFACEDESC ddsd;
  117.   ddsd.dwSize = sizeof(DDSURFACEDESC);
  118.   ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
  119.   ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
  120.                         DDSCAPS_FLIP |
  121.                         DDSCAPS_COMPLEX;
  122.   ddsd.dwBackBufferCount = 1;
  123.   ddrval = m_pDD->CreateSurface(&ddsd, &m_pFrontBuffer, NULL);
  124.   if (ddrval != DD_OK)
  125.   {
  126.     DDrawError("CreateSurface failed:", ddrval);
  127.     return FALSE;
  128.   }
  129.  
  130.   // get a pointer to the back buffer
  131.   DDSCAPS ddscaps;
  132.   ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
  133.   ddrval = m_pFrontBuffer->GetAttachedSurface(&ddscaps, &m_pBackBuffer);
  134.   if (ddrval != DD_OK)
  135.   {
  136.     DDrawError("GetAttachedSurface failed:", ddrval);
  137.     return FALSE;
  138.   }
  139.  
  140.   InitPalette();
  141.  
  142.   return TRUE;
  143. }
  144.  
  145. //-----------------------------------------------------------------------------
  146. // InitPalette
  147. //-----------------------------------------------------------------------------
  148. BOOL CGameFrame::InitPalette()
  149. {
  150.   return TRUE;
  151. }
  152.  
  153. //-----------------------------------------------------------------------------
  154. // KillGraphics
  155. //-----------------------------------------------------------------------------
  156. void CGameFrame::KillGraphics()
  157. {
  158.   // Get rid of DirectDraw objects
  159.   if (m_pFrontBuffer != NULL)
  160.     m_pFrontBuffer->Release();
  161.  
  162.   if (m_pGamePalette != NULL)
  163.     m_pGamePalette->Release();
  164.  
  165.   if (m_pDD != NULL)
  166.     m_pDD->Release();
  167. }
  168.  
  169. //-----------------------------------------------------------------------------
  170. // RestoreSurfaces
  171. //-----------------------------------------------------------------------------
  172. BOOL CGameFrame::RestoreSurfaces()
  173. {
  174.   HRESULT ddrval;
  175.  
  176.   if (m_pFrontBuffer != NULL && m_pFrontBuffer->IsLost() != DD_OK)
  177.   {
  178.     ddrval = m_pFrontBuffer->Restore();
  179.     if (ddrval != DD_OK)
  180.     {
  181.       DDrawError("m_pFrontBuffer Restore failed:", ddrval);
  182.       return FALSE;
  183.     }
  184.  
  185.     if (m_pGamePalette != NULL)
  186.       m_pFrontBuffer->SetPalette(m_pGamePalette);
  187.   }
  188.  
  189.   return TRUE;
  190. }
  191.  
  192. //-----------------------------------------------------------------------------
  193. // UpdateGame
  194. //-----------------------------------------------------------------------------
  195. BOOL CGameFrame::UpdateGame()
  196. {
  197.   return TRUE;
  198. }
  199.  
  200. //*****************************************************************************
  201. // Message Handlers
  202. //*****************************************************************************
  203.  
  204. //-----------------------------------------------------------------------------
  205. // OnSysCommand
  206. //-----------------------------------------------------------------------------
  207. void CGameFrame::OnSysCommand(UINT nID, LPARAM lParam) 
  208. {
  209.   if (nID != SC_KEYMENU)
  210.   {
  211.       CFrameWnd::OnSysCommand(nID, lParam);
  212.   }
  213. }
  214.  
  215. //-----------------------------------------------------------------------------
  216. // OnActivateApp
  217. //-----------------------------------------------------------------------------
  218. void CGameFrame::OnActivateApp(BOOL bActive, HTASK hTask) 
  219. {
  220.     CFrameWnd::OnActivateApp(bActive, hTask);
  221.  
  222.     if (bActive)
  223.     ((CGameApp*)AfxGetApp())->StartPlay();
  224.   else
  225.     ((CGameApp*)AfxGetApp())->StopPlay();
  226. }
  227.  
  228. //*****************************************************************************
  229. // Diagnostics
  230. //*****************************************************************************
  231.  
  232. #ifdef _DEBUG
  233. void CGameFrame::AssertValid() const
  234. {
  235.     CFrameWnd::AssertValid();
  236. }
  237.  
  238. void CGameFrame::Dump(CDumpContext& dc) const
  239. {
  240.     CFrameWnd::Dump(dc);
  241. }
  242.  
  243. #endif //_DEBUG
  244.